#ifndef SIMPLE_SUPPORT_META_TRANSFORM_HPP
#define SIMPLE_SUPPORT_META_TRANSFORM_HPP

#include "list.hpp" // list_constructor
#include "reconstruct.hpp" // reconstruct_t

namespace simple::support::meta
{

	template <typename ListCons, template<typename...> typename Transform>
	struct transformed_list_constructor
	{
		template <typename... Ts>
		struct op
		{
			using type = typename ListCons::template function<Transform<Ts...>>;
		};
	};

	template <typename List, template <typename...> typename Operator>
	using transform_t = reconstruct_t
	<
		List,
		transformed_list_constructor<list_constructor<List>, Operator>::template op
	>;

} // namespace simple::support::meta

#endif /* end of include guard */
